1 /* 2 Copyright: Marcelo S. N. Mancini (Hipreme|MrcSnm), 2018 - 2021 3 License: [https://creativecommons.org/licenses/by/4.0/|CC BY-4.0 License]. 4 Authors: Marcelo S. N. Mancini 5 6 Copyright Marcelo S. N. Mancini 2018 - 2021. 7 Distributed under the CC BY-4.0 License. 8 (See accompanying file LICENSE.txt or copy at 9 https://creativecommons.org/licenses/by/4.0/ 10 */ 11 module hip.view.testscene; 12 version(Test): 13 14 import hip.graphics.g2d.geometrybatch; 15 import hip.hiprenderer.shader; 16 import hip.hiprenderer; 17 import hip.hiprenderer.viewport; 18 import hip.view.scene; 19 import hip.math.utils; 20 21 class TestScene : Scene, IHipPreloadable 22 { 23 import hip.api; 24 import hip.api.audio.audiosource; 25 26 mixin Preload; 27 28 //Lower Level API. Not available in the Scripting API 29 GeometryBatch geom; 30 Shader shader; 31 32 IHipFont smallFont; 33 IHipFont bigFont; 34 35 @Asset("sounds/pop.wav") 36 __gshared IHipAudioClip pop; 37 38 39 AHipAudioSource src; 40 41 import hip.graphics.g2d.particles; 42 HipParticleSystem sys; 43 44 45 float x = 100, y = 100; 46 47 override void initialize() 48 { 49 logg(getAssetsForPreload); 50 // logg(pop is null); 51 geom = new GeometryBatch(null, 5000, 5000); 52 geom.setColor(HipColor.green); 53 54 setWindowSize(HipRenderer.width, HipRenderer.height); 55 src = HipAudio.getSource(); 56 src.clip = pop; 57 58 59 smallFont = HipDefaultAssets.getDefaultFontWithSize(20); 60 bigFont = HipDefaultAssets.getDefaultFontWithSize(64); 61 62 sys = new HipParticleSystem(500); 63 sys.config.colors = [HipColorStop(HipColor.red, 0), HipColorStop(HipColor(0x000000ff), 0.2)]; 64 sys.config.velocityYInit = ValueRange(0, -300); 65 sys.setEmissionZone(100, 150, 100, 150); 66 } 67 override void update(float dt) 68 { 69 super.update(dt); 70 if(HipInput.areGamepadButtonsJustPressed([HipGamepadButton.psSquare, HipGamepadButton.psTriangle])) 71 logg("Button combination pressed!"); 72 73 auto v = HipInput.getAnalog(HipGamepadAnalogs.leftStick); 74 75 x+= dt*400*v[0]; 76 y+= dt*400*v[1]; 77 78 if(HipInput.isMouseButtonJustReleased(HipMouseButton.left)) 79 { 80 src.play(); 81 if(HipInput.isDoubleClicked(HipMouseButton.left)) 82 logg("Double clicked"); 83 else 84 logg("You just clicked me!"); 85 } 86 87 if(HipInput.isKeyJustPressed(HipKey.ENTER)) 88 { 89 logg("Don't press ENTER!"); 90 } 91 sys.update(dt); 92 } 93 94 override void render() 95 { 96 //////////////////////Lower Level//////////////////////// 97 super.render(); 98 geom.setColor(HipColor.red); 99 geom.fillRectangle(0, 0, 200, 200); 100 geom.setColor(HipColor.green); 101 geom.fillRectangle(0, 0, 100, 100); 102 geom.flush(); 103 104 105 //Use a non GC allocating string on render (String) for drawing the mousePosition 106 import hip.util.string; 107 float[2] mousePos = HipInput.getMousePosition(); 108 setFont(smallFont); 109 String s = String(mousePos); 110 drawText(s.toString, cast(int)mousePos[0], cast(int)mousePos[1]); 111 112 113 114 ////////////////////////Higher Level//////////////////////// 115 setGeometryColor(HipColor.white); 116 setFont(null); 117 drawText("Hello World Test Scene (Default Font)", 300, 280, HipColor.white, HipTextAlign.LEFT, HipTextAlign.TOP); 118 fillRectangle(cast(int)x, cast(int)y, 100, 100); 119 120 drawText("Null Textures uses that sprite over here", 300, 480, HipColor.white, HipTextAlign.LEFT, HipTextAlign.TOP); 121 fillRectangle(cast(int)x+200, cast(int)y, 100, 100); 122 drawTexture(null, 300, 500); 123 124 sys.draw(); 125 126 } 127 }